🧭 Kubernetes | January 30, 2021
Control plane VM: 쿠버네티스 클러스터를 관리하는 관리자
$ sudo swapoff -a
$ vi /etc/fstab 에서 swap.img 관련된 명령어 주석 처리
Make sure that the
br_netfilter
module is loaded. This can be done by runninglsmod | grep br_netfilter
. To load it explicitly callsudo modprobe br_netfilter
.
$ sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo systemctl enable docker
$ vi /etc/netplan/00-installer-config.yaml
network:
ethernets:
enp0s3:
addresses: [192.168.219.144/24]
gateway4: 192.168.219.1
nameservers:
addresses: [8.8.8.8, 168.126.63.1]
version: 2
enp0s3
은 사용자마다 다를 수 있으므로ifconfig
orip addr
명렁어로 확인
$ sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
위 명령어를 한줄씩 입력해도 되지만 한번에 실행되기 위해서 스크립트 형식으로 바꾼 내용은 아래에 있다.
cat
명령어로 하나의 쉘 스크립트 안에 덮어쓰기$ cat > install_kubernetes.sh
sudo apt-get update && sudo apt-get install -y apt-transport-https curlcurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.listdeb https://apt.kubernetes.io/ kubernetes-xenial mainEOFsudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl
chmod
명령어로 파일에 대한 실행 권한을 준 뒤 실행$ chmod +x ./install_kubernetes.sh
$ sudo ./install_kubernetes.sh
$ sudo vi /etc/hostname
# 접속 후 원하는 호스트명 입력
$ sudo vi /etc/netplan/00-installer-config.yaml
# 네트워크 ip 주소 변경
이때, 포트포워딩도 따로 설정해 주어야 함
$ sudo reboot
하나의 쿠버네티스를 제어하는 영역을 만드는 과정
Control plane VM에 해당함
sudo kubeadm init --apiserver-advertise-address="10.0.2.4" --apiserver-cert-extra-sans="10.0.2.4" --node-name "master" --pod-network-cidr=172.16.0.0/16
--apiserver-advertise-address
의 IP는 VM IP입니다.--apiserver-cert-extra-sans
의 IP는 VM IP입니다.--pod-network-cidr
는 쿠버네티스에 설치될 컨테이너 IP대역입니다. 조금 있다 설치할 CNI 네트워크 대역을 피하기 위해 172.16.0.0/16로 설정합니다. 만약 192.168.0.x대역으로 하면 CNI와 충돌나서 다시 클러스터를 생성해야 합니다.설치 이후 커맨드 창에 이러한 명령어를 실행하라고 나온다. 그대로 명령어를 실행해 주면 된다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
.kube
디렉토리와 config
파일을 홈 디렉토리에 생성
$ sudo 토큰 값
마스터 노드에서 확인이 가능
$ kubectl get nodes
하지만 아직 STATUS는 NOT READY 상태로 나온다. 이는 서로 통신이 안되는 상태이다.
이럴 때 CNI를 설치해주어야 한다.
$ curl https://docs.projectcalico.org/manifests/calico.yaml -O
$ kubectl apply -f callico.yaml
다음의 명령어를 통해 callico
파드가 실행중인 것을 확인
$ kubectl get pod -n kube-system
$ kubectl get no
no 는 노드를 뜻함.
이렇게해서 쿠버네티스가 모두 설치 완료되었다.
$ sudo kubeadm token create --print-join-command
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://docs.docker.com/engine/install/ubuntu/
https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises